iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0

? and ?:

如果在座各位程式高手看到 ? 肯定會有種 if-else short expression / one-line 寫法的既視感,沒錯,這裡就讓後面流程控制 (Control flow) 章節才會出現的 if-else 先出來接個課,如果跟這東西不熟的讀者也可以看到後面再往前補這邊的進度。

https://ithelp.ithome.com.tw/upload/images/20230920/20119910iW5o7uFtcG.png

讓我們直接看一個混亂至極的案例,原本的寫法如此的易懂,如果 dayOfIronMan 不為 nulldayOfIronMan 加一:

var dayOfIronMan: Int? = 4
if (dayOfIronMan != null) {
    dayOfIronMan = dayOfIronMan.inc()
} else {
		dayOfIronMan = 0
}

首先我們把 Nullable 跟 if-else 結合成 dayOfIronMan? 就可以讓只有非 null 才執行後面的 inc()

var dayOfIronMan: Int? = 4
dayOfIronMan = dayOfIronMan?.inc()

接著我們來處理後面的 else,利用 ?: 我們可以把 else 的行為接在後面,如此就可以完成 1 行換 5 行的成果了 ( LOC 大幅降低中(X )

dayOfIronMan = dayOfIronMan?.inc() ?: 0

在看完 ? 後你可能會想,那如果我一定要他執行後面的行為呢?這時候你有 !! (這不是震驚),在這種情況下,Kotlin 會幫你在 null 的時候噴錯,就會跟你想要對 null 進行運算依樣拿到nullPointerException

val len = s!!.length   // throws NullPointerException if s is null

保留字元 (Char)

下面這些常用於輸出 (不論是 logging 或是 stdout) 的時候用來編排文字顯示方式。

\t: 製表鍵,同鍵盤上 Tab 按鍵
\n: 換行顯示
\': 單引號
\": 雙引號
\\: 反斜線

字串串接 (String concatenate)

val dayOfIronManCompetition = 5
val totalDayOfIronManCompetition = 30
"今天是鐵人賽第 $dayOfIronManCompetition 天," + "總共需要完成 $totalDayOfIronManCompetition 天"
// 今天是鐵人賽第 5 天,總共需要完成 30 天
"扣掉今天還需要 ${totalDayOfIronManCompet - dayOfIronManCompetition} 天" 
// 扣掉今天還需要 25 天
// {} 可以放入各式運算式.

上一篇
Day 4 Kotlin 可空性
下一篇
Day6 資料結構-集合-列表
系列文
成為一名 Kotlin 後端攻城獅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Brandy
iT邦新手 3 級 ‧ 2023-09-20 21:39:54

!! 的確是為了震驚,沒有很確定前,建議你不要用

我要留言

立即登入留言